home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / src / d / seproto.d
Encoding:
Modula Definition  |  1997-10-26  |  19.2 KB  |  460 lines

  1. DEFINITION MODULE SEProto;
  2. (*
  3. Gruppe: Pers”nliche
  4. ID:   P50793@HH
  5. Wg.:  SE-Protokol
  6. Von:  Christian Felsch @ HH (Do, 01.02.96 17:41)
  7. An:   Dirk Steins @ K2
  8. MId:  199602011741.p50793@hh.maus.de
  9.  
  10.  
  11.  Hallo Dirk!
  12.  
  13. In Absprache mit Frank Schramm @ HH2 habe ich folgende Erweiterungen fr das 
  14. SE-Protokol vorzuschlagen:
  15.  
  16.    SEPROTOVERSION 0x101
  17.    
  18.    SE_CLOSE
  19.       msg[3,4] = Zeiger auf Name oder Maske der Dateien, die geschlossen 
  20.                  werden sollen.
  21.       msg[5]   = Flag 
  22.                   0: Datei[en] nur sichern.
  23.                   1: Datei[en] sichern und schliežen.
  24.    
  25.    SE_PROJECT,
  26.    ES_PROJECT
  27.       msg[3,4] = Zeiger auf Dateiname oder NULL, damit man ein Projekt 
  28.                  abmelden kann.
  29.  
  30.  
  31. Die PC-Shell von Frank und qed werden diese Erweiterungen benutzen, sind aber 
  32. durch die Kontrolle der Protokol-Version selbstverst„ndlich kompatibel zur 
  33. Version 1.00.
  34. Wir wrden es begžen, wenn Du die Žnderungen in das offizielle SE-Protokol 
  35. bernimmst!
  36.  
  37. Noch eine andere Frage: sollte ein Programm eigentlich zwingend auf die 
  38. Best„tigung eines Kommandos warten? qed macht das z.Zt. so, daž er nach dem 
  39. Abschicken eines SE-Kommandos ein Timerevent einklinkt und eine bestimmte Zeit 
  40. auf den SE_ACK wartet. Wenn er nicht kommt, meldet qed das und vergižt die 
  41. Shell als Kommunikationspartner. 
  42. Das Problem tritt immer dann auf, wenn die Shell gerade besch„ftigt ist (z.B. 
  43. mit dem Compiler) und der Editor schickt erneut etwas. 
  44.  
  45.  Chris.
  46. *)
  47. (*
  48. An:   Dirk Steins @ K2
  49. MId:  199607210940.p60841@hh.maus.de
  50. Hierzu gibt es einen Kommentar
  51.  
  52.  
  53.  Hallo Dirk!
  54.  
  55. Dirk Haun und ich denken gerade mal wieder ber ein paar Žnderungen und 
  56. Erweiterungen am SE-Protokol nach:
  57.  
  58. Ich habe eine Nachricht definiert, in der ein Array mit den Texten bergeben 
  59. wird, die der Editor in sein SE-Men eintr„gt. Bisher stand bei qed immer 
  60. 'Compiler', 'Make' usw. Fr eine TeX-Shell w„re es aber sch”n, wenn dort 
  61. 'LaTeX', 'DVI ansehen' usw. stehen wrde. Ich habe mal testweise folgende neue 
  62. Nachricht in qed und meine TeX-Shell eingebaut:
  63.  
  64. #define SE_MENU    0x4210
  65.  /* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme
  66.   * in sein Men eintragen soll.
  67.   * Ein Element darf auch NULL sein.
  68.   * Word 3+4: Ein Zeiger auf die Stuktur mit den Eintr„gen.
  69.   * Mit ES_ACK best„tigt der Editor die Meldung.
  70.   */
  71.  
  72. typedef struct
  73. {
  74.    UBYTE *compStr;
  75.    UBYTE *makeStr;
  76.    UBYTE *makeAllStr;
  77.    UBYTE *linkStr;
  78.    UBYTE *execStr;
  79.    UBYTE *makeexecStr;
  80. } SEMENUINFO;
  81.  
  82. Aužerdem w„re es sinnvoll, wenn man optional beim SE_OPEN eine Cursorposition 
  83. angeben k”nnte. Die Daten dafr passen gerade noch in das Array:
  84.  Word 5+6 LONG fr die Zeilennummer
  85.  Word 7   WORD fr die Spaltennummer
  86.  
  87. Was meinst Du zu den beiden Punkten?
  88.  
  89. *)
  90.  
  91. (* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung
  92.  * und Editoren. 
  93.  *
  94.  * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell
  95.  * zur Compilierung und „hnlichen Sachen zu veranlassen, und um Fehler-
  96.  * meldungen und/oder Fehlerdateien an den Editor zurckzugeben.
  97.  *
  98.  * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen
  99.  * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_
  100.  * 
  101.  * Da teilweise Zeiger auf Speicherbereiche bergeben werden, ist vom 
  102.  * jeweiligen Absender der Nachricht darauf zu achten, daž diese
  103.  * Speicherbereiche vom Empf„nger auch lesbar sind (Memory Protection!). 
  104.  * Dafr sind diese als Readable zu allozieren!
  105.  * 
  106.  * Version  Datum       Žnderungen
  107.  * =====================================================================
  108.  *   0.1    10.1.94     Erster Entwurf
  109.  *   0.2    17.1.94     SE_TERMINATE hinzugefgt
  110.  *   0.3    25.1.94     SE_CLOSE hinzugefgt. 
  111.  *                      tErrInfo ge„ndert, SE_ERROR ge„ndert
  112.  *                      tShellCommands und tEditCommands korrigiert
  113.  *   0.4    21.8.96     Erweitert auf Version SEPROTOVERSION 102
  114.  *)
  115.  
  116. (*
  117. EXPORT SE_INIT, SE_OK, SE_ACK, SE_OPEN, SE_ERROR, SE_ERRFILE, SE_PROJECT,
  118.        SE_QUIT, SE_TERMINATE, SE_CLOSE,
  119.        ES_INIT, ES_OK, ES_ACK, ES_COMPILE, ES_MAKE, ES_MAKEALL, ES_LINK,
  120.        ES_EXEC, ES_MAKEEXEC, ES_PROJECT, ES_QUIT,
  121.        SEPROTOVERSION,
  122.        tShellCommands, tEditCommands, tShellSet, tEditSet,
  123.        tPtrString, LONGBITSET,
  124.        tErrInfo, tPtrErrInfo, tMessRec, tPtrMessRec;
  125. *)       
  126.  
  127. CONST   
  128.  
  129.     SE_INIT     =   4200H;  
  130.     (* Die Shell fragt an, ob ein Editor das SE-Protokoll
  131.      * versteht. 
  132.      * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
  133.      * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
  134.      * Wort 6: Untersttze Versionsnummer des Protokolls
  135.      * Als Antwort erh„lt es ein ES_OK vom  Editor.
  136.      *)
  137.     SE_OK       =   4201H;  
  138.     (* Die Shell sagt dem Editor, das sie das Protokoll
  139.      * versteht. 
  140.      * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
  141.      * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
  142.      * Wort 6: Untersttze Versionsnummer des Protokolls
  143.      * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
  144.      *)
  145.     SE_ACK      =   4202H;  
  146.     (* Die Shell best„tigt den Empfang eines Editorkommandos und gibt zurck, 
  147.      * ob das Kommando ausgefhrt wird.
  148.      * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt.
  149.      *         FALSE: Das Kommando wird nicht verstanden
  150.      * Eine SE_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg-
  151.      * reich ausgefhrt wurde. Es sagt nur, daž die Shell das Kommando 
  152.      * versteht und ausfhren wird!
  153.      *)
  154.     SE_OPEN     =   4203H;  
  155.     (* Die Shell sagt dem Editor, daž er einen Text ”ffnen
  156.      * soll. Als Antwort erh„lt die Shell ein ES_ACK
  157.      * Wort 3+4: Ein Zeiger auf den Filenamen des zu ”ffnenden Files
  158.      *)
  159.     SE_ERROR    =   4204H;  
  160.     (* Es ist ein Fehler beim Compilieren aufgetreten. 
  161.      * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt
  162.      *           aufgebaut ist:
  163.      *              Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes.
  164.      *              Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung
  165.      *              Wort 4  : Die Fehlernummer 
  166.      * Mit ES_ACK best„tigt der Editor die Meldung.
  167.      *)
  168.     SE_ERRFILE  =   4205H;  
  169.     (* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem 
  170.      * Errorfile, welches in der Message spezifiziert wird.
  171.      * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den 
  172.      *           Fehlermeldungen
  173.      * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes
  174.      * Mit ES_ACK best„tigt der Editor die Meldung.
  175.      *)
  176.     SE_PROJECT  =   4206H;  
  177.     (* Die Shell teilt dem Editor mit, daž das Projekt
  178.      * ge„ndert wurde. Der Filename des aktuellen
  179.      * Projektfiles wird als Parameter bergeben
  180.      * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles
  181.      * Der Editor best„tigt mit ES_ACK.
  182.      * Eine vernnftige Reaktion des Editors w„re es in dem Fall,
  183.      * ebenfalls das Projekt zu wechseln, sofern er diese untersttzt.
  184.      *)
  185.     SE_QUIT     =   4207H;
  186.     (* Die Shell teilt dem Editor mit, daž sie jetzt beendet wird.
  187.      * Der Editor sollte in dem Fall die Shell als Kommunikationspartner
  188.      * vergessen.
  189.      * Parameter gibt es keine.
  190.      * Es wird keine Antwort erwartet!
  191.      *)
  192.     SE_TERMINATE    = 4208H;
  193.     (* Die Shell teilt dem Editor mit, daž dieser sich beenden soll. 
  194.      * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz
  195.      * normalen Terminierungsprozež durchlaufen (und in dem auch ein ES_QUIT
  196.      * schicken!). Der Grund fr so eine Meldung der Shell k”nnte zum Beispiel
  197.      * zu wenig Speicher zum compilieren sein.
  198.      * Mit ES_ACK best„tigt der Editor die Meldung. 
  199.      *)
  200.     SE_CLOSE        = 4209H;
  201.     (* Die Shell teilt dem Editor mit, daž dieser alle Texte sichern soll.
  202.      * Der Editor sollte bei ge„nderten Texten vorher nachfragen.
  203.      * Mit ES_ACK best„tigt der Editor die Meldung. 
  204.      *)
  205.      
  206.     SE_MENU         = 4210H;
  207.     (* Die Shell teilte dem Editor mit, was er fr die einzelnen Programme
  208.      * in sein Men eintragen soll.
  209.      * Ein Element darf auch NULL sein.
  210.      * Word 3+4: Ein Zeiger auf die Stuktur mit den Eintr„gen.
  211.      * Mit ES_ACK best„tigt der Editor die Meldung.
  212.      *)
  213.     
  214.     ES_INIT     =   4240H;  
  215.     (* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht. 
  216.      * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
  217.      * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
  218.      * Wort 6: Untersttze Versionsnummer des Protokolls
  219.      * Als Antwort erh„lt es SE_OK von der Shell
  220.      *)
  221.     ES_OK       =   4241H;  
  222.     (* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
  223.      * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
  224.      * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
  225.      * Wort 6: Untersttze Versionsnummer des Protokolls
  226.      * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
  227.      *)
  228.     ES_ACK      =   4242H;  
  229.     (* Der Editor best„tigt den Empfang des Kommandos 
  230.      * Wort 3: TRUE: Kommando wird verstanden und ausgefhrt.
  231.      *         FALSE: Das Kommando wird nicht verstanden
  232.      * Eine ES_ACK mit TRUE sagt nichts darber aus, ob das Kommando erfolg-
  233.      * reich ausgefhrt wurde. Es sagt nur, daž der Editor das Kommando 
  234.      * versteht und ausfhren wird!
  235.      *)
  236.     ES_COMPILE  =   4243H;  
  237.     (* Der Editor sagt der Shell, daž sie ein File bersetzen soll. 
  238.      * Ein Pointer auf den Dateinamen wird in der Message bergeben. 
  239.      * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei.
  240.      * Diese Nachricht muž mit SE_ACK best„tigt werden.
  241.      *)
  242.     ES_MAKE     =   4244H;  
  243.     (* Der Editor sagt der Shell, daž sie ein Make ausfhren soll. 
  244.      * Ein Filename kann in der Message bergeben werden, muž aber
  245.      * nicht gesetzt sein und muž von der Shell auch nicht beachtet 
  246.      * werden!
  247.      * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
  248.      * Die Shell best„tigt mit SE_ACK.
  249.      *)
  250.     ES_MAKEALL  =   4245H;  
  251.     (* Der Editor sagt der Shell, daž ein komplettes Make All ausgefhrt 
  252.      * werden soll. Ein Filename fr das Makefile kann (muž nicht) in 
  253.      * der Message bergeben werden.
  254.      * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
  255.      * Die Shell best„tigt mit SE_ACK.
  256.      *)
  257.     ES_LINK     =   4246H;  
  258.     (* Der Editor sagt der Shell, daž das Programm
  259.      * gelinkt werden soll. Ein Filename kann
  260.      * in der Message bergeben werden, muž aber
  261.      * nicht unbedingt beachtet werden von der Shell!
  262.      * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll 
  263.      *           (oder NULL)
  264.      * Die Shell best„tigt mit SE_ACK.
  265.      *)
  266.     ES_EXEC     =   4247H;  
  267.     (* Der Editor sagt der Shell, daž das Programm
  268.      * zu der Source ausgefhrt werden soll. Ein 
  269.      * Filename kann bergeben werden, muž von der
  270.      * Shell aber nicht beachtet werden. 
  271.      * Wort 3+4: Zeiger auf den Namen des auszufhrenden Files (oder NULL)
  272.      *           Bei einer Sourcedatei ist diese ggf. noch zu
  273.      *           compilieren und/oder zu linken 
  274.      * Die Shell best„tigt mit SE_ACK.
  275.      *)
  276.     ES_MAKEEXEC =   4248H;  
  277.     (* Die Shell soll ein Make ausfhren und danach das Programm ausfhren. 
  278.      * Ein Filename fr das Makefile kann (muž nicht) in der Message
  279.      * bergeben werden.
  280.      * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
  281.      * Die Shell best„tigt mit SE_ACK.
  282.      *)
  283.     ES_PROJECT  =   4249H;  
  284.     (* Der Editor teilt der Shell mit, daž das Project
  285.      * ge„ndert/gewechselt wurde. Der Filename des 
  286.      * Projektfiles wird als Parameter in der Message
  287.      * bergeben.
  288.      * Wort 3+4: Zeiger auf den Namen des Projektfiles 
  289.      * Die Shell best„tigt mit SE_ACK. 
  290.      * Eine vernnftige Reaktion der Shell w„re in dem Fall, ebenfalls
  291.      * das Projekt zu wechseln, sofern es diese untersttzt.
  292.      *)
  293.     ES_QUIT     =   424AH;
  294.     (* Der Editor teilt der Shell mit, daž er jetzt beendet wird.
  295.      * Die Shell sollte in dem Fall den Editor als Kommunikationspartner
  296.      * vergessen.
  297.      * Parameter gibt es keine.
  298.      * Es wird keine Antwort erwartet!
  299.      *)
  300.     
  301.     SE_DATA     =   0;
  302.     (* Nur fr Typdeklaration benutzt, eigentlich berflssig
  303.      *)
  304.  
  305.     SEPROTOVERSION  = 102H; (* Die Versionsnummer des Protokolls.
  306.                              * Highbyte ist die Major Number
  307.                              * Lowbyte ist die Lower Number
  308.                              *)
  309.  
  310. (* Typdefinitionen fr die Nachrichten
  311.  *)
  312.  
  313. (* Dies definiert die einzelnen Bits, welche Nachrichten untersttzt werden
  314.  *)
  315. TYPE    tShellCommands = (seInit, seOk, seAck, seOpen, seError, seErrfile, 
  316.                           seProject, seQuit, seTerminate, seClose);
  317.  
  318.         tEditCommands  = (esInit, esOk, esAck, esCompile, esMake, esMakeall, 
  319.                           esLink, esExec, esMakeexec, esProject, esQuit, res11,
  320.                           res12, res13, res14, res15, res16, res17, res18,
  321.                           res19, res20, res21, res22, res23, res24, res25,
  322.                           res26, res27, res28, res29, res30, res31);
  323.  
  324.         tShellSet      = SET OF tShellCommands;
  325.         
  326.         tEditSet       = SET OF tEditCommands;
  327.         
  328.         tString        = ARRAY [0..255] OF CHAR;
  329.  
  330.         tPtrString  = POINTER TO ARRAY [0..255] OF CHAR;
  331.         (* Zeiger auf einen nullterminierten String
  332.          *)
  333.         
  334.         LONGBITSET  = SET OF [0..31];
  335.         (* Leider kennt das nicht jeder Compiler
  336.          *)
  337.  
  338.         tErrInfo     = RECORD
  339.                         errFile : tPtrString;
  340.                         (* Zeiger auf den Namen der compilierten Datei
  341.                          *)
  342.                         errMess : tPtrString;
  343.                         (* Zeiger auf die Fehlermeldung
  344.                          *)
  345.                         errNum  : INTEGER;
  346.                         (* Die Fehlernummer 
  347.                          *)
  348.                         errLine : LONGINT;
  349.                         (* Die fehlerhafte Zeile
  350.                          *)
  351.                         errRow  : INTEGER;
  352.                         (* Die Spalte mit dem Fehler (oder 0)
  353.                          *)
  354.                       END;
  355.         tPtrErrInfo = POINTER TO tErrInfo;
  356.  
  357.         tMenuInfo   = RECORD
  358.                         compStr     : tPtrString;
  359.                         makeStr     : tPtrString;
  360.                         makeAllStr  : tPtrString;
  361.                         linkStr     : tPtrString;
  362.                         execStr     : tPtrString;
  363.                         makeExecStr : tPtrString;
  364.                       END;
  365.         tPtrMenuInfo= POINTER TO tMenuInfo;
  366.  
  367.         (* šber diese Recorddefinition kann man alle
  368.          * Messages des Protokolls behandeln
  369.          *)
  370.         
  371.         tMessRec    = RECORD
  372.                         msg     : INTEGER;  
  373.                         (* Messagenummer, Wort 0 *)
  374.                         apId    : INTEGER;  
  375.                         (* Applikation ID des Senders, Wort 1 *)
  376.                         overLen : INTEGER;  
  377.                         (* šberl„nge der Nachricht (immer 0 fr SE-Protokoll),
  378.                          * Wort 2 *)
  379.                         CASE : CARDINAL OF 
  380.                           SE_INIT,
  381.                           ES_INIT   : shellBits: tShellSet; 
  382.                           (* Bits, die angeben, welche Shell-Nachrichten
  383.                            * untersttzt werden (Wort 3)
  384.                            *)
  385.                                       editBits : tEditSet;
  386.                           (* Bits, die angeben, welche Editor-Nachrichten
  387.                            * untersttzt werden (Worte 4 und 5)
  388.                            *)
  389.                                       version  : CARDINAL;
  390.                           (* Untersttze Versionsnummer des Protokolls
  391.                            * Aktuell: $100
  392.                            *)
  393.                         | SE_OK,
  394.                           ES_OK     : okShellBits: tShellSet; 
  395.                           (* Bits, die angeben, welche Shell-Nachrichten
  396.                            * untersttzt werden (Wort 3)
  397.                            *)
  398.                                       okEditBits : tEditSet;
  399.                           (* Bits, die angeben, welche Editor-Nachrichten
  400.                            * untersttzt werden (Worte 4 und 5)
  401.                            *)
  402.                                       okVersion: CARDINAL;
  403.                           (* Untersttze Versionsnummer des Antwortenden
  404.                            * Aktuell: $100
  405.                            *)
  406.                                       otherId  : INTEGER;   
  407.                           (* Die ApId des Senders, auf das dies eine Antwort
  408.                            * ist (Wort 7)
  409.                            *)
  410.                         | SE_ACK,
  411.                           ES_ACK    : acknowledge:  BOOLEAN;
  412.                           (* TRUE: Kommando wurde akzeptiert,
  413.                            * FALSE: Kommando konnte nicht ausgefhrt werden
  414.                            *)
  415.                         | SE_OPEN   : namePtr   : tPtrString;
  416.                                       iLineNum  : LONGINT;
  417.                                       iColNum   : INTEGER;
  418.                           (* Zeiger auf den Namen des zu ladenden Textes
  419.                            * (Worte 3 und 4)
  420.                            *  Worte 5 und 6: Zeilennummer mit Position zum ™ffnen
  421.                            *  Wort 7: Spaltennummer
  422.                            *)
  423.                         | SE_ERROR  : errorPtr  : tPtrErrInfo;
  424.                           (* Zeiger auf Speicherbereich, der die Fehlermeldung
  425.                            * spezifiziert.
  426.                            *)
  427.                         | SE_MENU   : menuInfoPtr: tPtrMenuInfo;
  428.                           (* Zeiger auf Speicherbereich mit Menuinformationen 
  429.                            *)
  430.                         | SE_ERRFILE : errPtr   : tPtrString;
  431.                           (* Zeiger auf den Namen des Errorfiles *)
  432.                                        fnamePtr : tPtrString;
  433.                           (* Zeiger auf den Namen der compilierten Datei *)
  434.                         | SE_PROJECT,
  435.                           ES_COMPILE,
  436.                           ES_MAKE,
  437.                           ES_MAKEALL,
  438.                           ES_LINK,
  439.                           ES_EXEC,
  440.                           ES_MAKEEXEC,
  441.                           ES_PROJECT : filePtr  : tPtrString;
  442.                           (* Zeiger auf den Filenamen des Files, welches 
  443.                            * behandelt werden soll
  444.                            *)
  445.                         | SE_QUIT,
  446.                           SE_TERMINATE,
  447.                           SE_CLOSE,
  448.                           ES_QUIT,
  449.                           SE_DATA:     data     : ARRAY [0..4] OF INTEGER;
  450.                           (* Definition fr Maximall„nge des Records
  451.                            *)
  452.                         END;
  453.                       END;
  454.  
  455.         tPtrMessRec = POINTER TO tMessRec;
  456.         (* Ein Zeiger auf diese Messageblock
  457.          *)
  458.  
  459. END SEProto.
  460.